{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 附录A 机器学习环境部署 \n",
    "\n",
    "____"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "本书代码在**python2.7**环境下，依赖的python包概览（深度学习框架见附录B，这里不包含）：\n",
    "\n",
    "| 软件包名称 | 简介 |\n",
    "| :---- |:---- |\n",
    "|numpy|NumPy系统是Python的一种开源的数值计算扩展。NumPy（Numeric Python）提供了许多高级的数值编程工具，如：矩阵数据类型、矢量处理，以及精密的运算库。专为进行严格的数字处理而产生|\n",
    "|pandas|Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具，该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型，提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法|\n",
    "|matpoltlib|Python 2D绘图领域使用最广泛的库。它能让使用者很轻松地将数据图形化，并且提供多样化的输出格式|\n",
    "|seaborn|matplotlib封装，使得绘制更加的简单|\n",
    "|scikit-learn|scikit-learn的基本功能主要被分为六个部分，分类，回归，聚类，数据降维，模型选择，数据预处理。Scikit-Learn中的机器学习模型非常丰富，包括SVM，决策树，GBDT，KNN等等，可以根据问题的类型选择合适的模型|\n",
    "|xgboost|XGBoost是GBDT的一种实现类库，见本书“1.10 融合成群体”|\n",
    "|opencv|OpenCV是视觉处理python库|\n",
    "\n",
    "可以使用conda(这里指Anaconda简称)、pip等方式安装上述依赖，**推荐优先使用conda安装，减少类库的不兼容问题**。对于Mac用户，安装上述依赖的推荐方式：**conda > brew > pip**。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## A.1 Anaconda环境部署"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "很多操作系统已经内置了python环境，比如ubuntu，centos,mac os,这些系统的很多功能都依赖于python的某个版本，如果自己编写程序所使用的python版本或python库版本不一致时，就需要升级或着降级版本，在升级或降级后导致的不兼容问题数不胜数。为了不污染系统运行的python环境，在这里建议使用anaconda来管理开发的python环境。\n",
    "\n",
    "anaconda所建立的python环境与系统的python环境完全是隔离的，而且anaconda还可以创建多套python环境，这样就保证了开发环境和系统环境互相独立。 除了anaconda之外，还有virtualenv等流行的开发环境管理器。anaconda的优势在于简单的安装和集成了几乎所有的科学计算库，同时支持linux,mac os,windows主流平台。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "anaconda的下载地址是https://www.continuum.io/downloads, 读者根据所使用的操作系统下载对应的版本。安装完成之后，就拥有了本书第一章所使用的大部分python库。\n",
    "\n",
    "#### Windows\n",
    "\n",
    "双击ancaconda安装程序，并按照提示安装到默认路径。\n",
    "    \n",
    "#### MacOS\n",
    "\n",
    "MacOS提供了两种安装程序，一种是dmg格式的安装程序，就是带图形化的版本，提供了图形化的安装和管理。但是图形化的管理程序经常出现卡死的情况，因此不建议使用。直接下载sh格式命令行的安装程序。\n",
    "\n",
    "打开Terminal.app或者iTerm2.app并输入："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "$ bash ~/Downloads/Anaconda2-4.2.0-MacOSX-x86_64.sh"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "按照提示信息使用默认选项进行安装，安装默认输出到~/anaconda2/下面。\n",
    "\n",
    "#### Linux\n",
    "\n",
    "下载sh格式的安装程序，和MacOS的命令行安装过程一样，打开终端程序并输入：\n",
    "    $ bash ~/Downloads/Anaconda3-4.2.0-Linux-x86_64.sh\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "$ bash ~/Downloads/Anaconda3-4.2.0-Linux-x86_64.sh"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "读者应以下载的文件名称替换上面的安装名称。最后注意添加PATH"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "export PATH=~/anaconda/bin:$PATH"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 卸载方法\n",
    "\n",
    "windows的卸载和别的程序一样在控制面板中卸载。mac和linux使用`rm -rf ~/anaconda2/`即可"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## A.2 使用anaconda"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "conda使用最多命令就是install命令"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "condal install <包名> "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "conda install的好处是分析好包的依赖关系，比如需要安装a，它可以分析出a的安装需要升级现在环境中的b，降级现在环境中的c，这样用户来综合决策是否要安装a，当用户决定安装a的时候，conda会将上述升级b与降级c的操作一并执行。\n",
    "\n",
    "conda也可以指定安装版本，如："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "conda install numpy=1.11.2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "conda卸载包使用uninstall命令"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "conda uninstall <包名> "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "anaconda的常用命令有：\n",
    "\n",
    "| 用法 | 简介 |\n",
    "|-----|-----|\n",
    "| conda info | conda基本信息，包括所在平台，版本，路径等 |\n",
    "| conda list [-n envName]| 安装了的软件包 |\n",
    "| conda search packageName| 搜索软件包 |\n",
    "| conda create envName | 创建一个环境 |\n",
    "| conda install [-n envName] packageName | 安装软件包 |\n",
    "| conda update [-n envName] packageName | 更新软件包 |\n",
    "| conda remove [-n envName] packageName | 删除软件包 |\n",
    "\n",
    "conda 在安装之后会生成一个默认的环境root，参数-n是开发环境的名称，省略-n参数就是对当前的环境执行对应的操作。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## A.3 pip环境部署\n",
    "\n",
    "对于conda中没有的的安装包，如xgboost，可以使用pip工具配合安装，python2.7内置pip。Mac用户也可以选择使用Homebrew补充缺失的安装包。\n",
    "\n",
    "pip使用install命令安装包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "pip install <包名> "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以指定版本，如"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "pip install xgboost==0.6"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "卸载使用uninstall命令"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "pip uninstall <包名> "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## A.4 安装abupy"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "本书中使用了abupy类库的机器学习模块，读者可以在https://github.com/bbfamily/abu 中下载并使用, 如下载地址有变动，通过关注公众号:abu_quant获取最新git地址。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### pip安装（推荐）\n",
    "\n",
    "pip安装abupy，终端输入如下命令"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "pip install abupy"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 手动安装\n",
    "\n",
    "安装好python环境后，下载工程源码，进入set_up目录，python运行set_up.py文件。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "python set_up.py"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 其它安装方式\n",
    "\n",
    "其它部署方式请阅读git项目首页，或者阅读公众号中abu文档。"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
